#if defined(__dsPIC33F__)
#include "p33Fxxxx.h"
#elif defined(__PIC24H__)
#include "p24Hxxxx.h"
#endif

void __attribute__((interrupt, no_auto_psv)) _INT0Interrupt(void)
{
unsigned valor=0;
IFS0bits.T1IF=0; // Borrar bandera solicitud interr. T1
AD1CON1bits.SAMP=0; // Iniciar conversion
}

void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt(void)
{
unsigned valor;
float voltios;
IFS0bits.AD1IF=0; // Borrar bandera solicitud interr. AD
valor=ADC1BUF0; // Tomar valor convertido
voltios=5.0*valor/1024; // Convertir valor a voltios
PORTD = voltios;
}

/*
while(!AD1CON1bits.DONE); // Esperar fin de conversion
valor=ADC1BUF0; // Tomar valor convertido
}
*/

main()
{
// Configuracion T1
T1CONbits.TCKPS=1; // preescalado 1:8
TMR1=0; // Poner a cero contador
PR1=24999; // Periodo 100 ms

// Configuracion AD
AD1CON1bits.ASAM=1; // Inicia muestreo en fin de conversion
AD1CHS0bits.CH0SA=7; // Muestrea canal AN7

//Poner puerto D como salida
TRISD =0x0000; 

// Configurar interr., arrancar T1 y AD
IFS0bits.T1IF=0; // Borrar bandera solicitud interr. T1
IEC0bits.T1IE=1; // Habilitar interr. T1
IFS0bits.AD1IF=0; // Borrar bandera solicitud interr. AD
IEC0bits.AD1IE=1; // Habilitar interr. AD
AD1CON1bits.ADON=1; // Arrancar conversor AD
T1CONbits.TON=1; // Poner T1 en marcha
while(1);
}
